<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        
        // 
        var arr = new Array()
        // instanceof 判断当前对象是否登录其原型对象 
        console.log(arr,arr instanceof Array);
        var obj = new Object()
        console.log(obj,obj instanceof Object)

        var pro = new Promise((resolve,reject)=>{

        })
        console.log(pro , pro instanceof Promise  )
        // then().catch().finally()
        // Promise.all()
        // Promise.race()
        // pedding
        // fulfilled 
        // rejected 

        // 面向对象   把过程事务抽象成 一个对象 (this)   添加特征和行为  (属性和方法)
        // 面向过程   具体化  实际分析问题解决问题 的具体步骤

        // 构造函数  (构造器 +  原型对象  + 静态对象)
        function Cat(name,color){
            // constructor 
            // {}
            // this => {}   构造函数再实例化过程创建 新的对象  指向this 
            this.name = name;
            this.color = color; 
        }

        // 原型对象接受一些公共的属性和方法 
        Cat.prototype.type = "Cat";
        Cat.prototype.call = function(){
            console.log('喵喵~~')
        }
        Cat.prototype.skill = function(){
            console.log('我会抓老鼠')
        }
        Cat.prototype.say = function(){
            console.log(this.name,this.color);
        }

        // 静态对象 与this无关  不能参与实例化 
        Cat.hobby = ["睡觉","吃鱼"];

        console.log(Cat);

        var lucy = new Cat("Lucy","orange");
        console.log(lucy)
        console.log(lucy.name)
        console.log(lucy.color)
        console.log(lucy.type)
        // __proto__ 指向实例化对象的 原型对象   ==> 当前这个对象的原型对象 
        lucy.call()
        lucy.say()
        // console.log(lucy.call())


        function Person(name,sex){
            // constructor 构造器
            this.name = name;
            this.sex = sex;

            // 会给所有的实例化对象绑定 __proto__   指向构造函数的原型对象 
            // constructor  

            // this.__proto__ =  Person.prototype 

        }
        
        // prototype 所有的实例化对象属性  接受共有的属性和方法  
        Person.prototype.die = "100年";
        
        var p1 = new Person("zkl",'男性');
        console.log(p1)
        // __proto__    constructor   ==> 这个实例化对象的构造器  

        // 自己有 ==>   自己的实例本身 构造器 
        console.log(p1.name)
        // 自己没有 ==>  自己的原型对象 
        console.log(p1.die);
        // 原型对象没有  __proto__  =>  undefiend 
        console.log(p1.age)

        

    </script>
</body>
</html>